package com.coder.oj.admin.controller;

import com.coder.oj.admin.dto.OauthDto;
import com.coder.oj.admin.mapstruct.OauthMapstruct;
import com.coder.oj.admin.query.OauthQuery;
import com.coder.oj.admin.service.OauthService;
import com.coder.oj.admin.vo.OauthVo;
import com.coder.oj.common.core.JsonPage;
import com.coder.oj.common.core.JwtToken;
import com.coder.oj.common.core.R;
import com.coder.oj.common.mapper.OauthMapper;
import com.coder.oj.common.validate.ValidationGroups;
import com.coder.oj.common.vo.TreeVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Api(tags = {"权限管理"})
@RestController
@RequestMapping("/oauth")
public class OauthController {

    @Autowired
    private OauthService oauthService;

    @Autowired
    private OauthMapper oauthMapper;

    @Autowired
    private OauthMapstruct oauthMapstruct;

    @JwtToken
    @PostMapping("/page")
    @ApiOperation("分页查询")
    public R<JsonPage<OauthVo>> getOauthPage(@RequestBody OauthQuery params) {
        return R.ok().setResult(oauthService.getOauthPage(params));
    }

    @JwtToken
    @GetMapping("/list")
    @ApiOperation("权限列表")
    public R<List<OauthVo>> getOauthList() {
        return R.ok().setResult(oauthService.getOauthList());
    }

    @JwtToken
    @GetMapping
    @ApiOperation("权限详情")
    public R<OauthVo> getOauthById(@RequestParam("id") Long id) {
        return R.ok().setResult(oauthMapstruct.toVO(oauthMapper.selectById(id)));
    }

    @JwtToken
    @PostMapping
    @ApiOperation("新增权限")
    public R saveOauth(@Validated(ValidationGroups.Insert.class) @RequestBody OauthDto param) {
        oauthMapper.insert(oauthMapstruct.toEntity(param));
        return R.ok();
    }

    @JwtToken
    @PutMapping
    @ApiOperation("修改权限")
    public R updateOauth(@Validated(ValidationGroups.Update.class) @RequestBody OauthDto param) {
        oauthMapper.updateById(oauthMapstruct.toEntity(param));
        return R.ok();
    }

    @JwtToken
    @DeleteMapping
    @ApiOperation("删除权限")
    public R deleteOauth(@RequestParam("id") Long id) {
        oauthService.deleteOauth(id);
        return R.ok();
    }

    @JwtToken
    @GetMapping("/role")
    @ApiOperation("角色权限")
    public R<List<OauthVo>> getOauthsByRoleId(@RequestParam("id") Long id) {
        return R.ok().setResult(oauthService.getOauthsByRoleId(id));
    }

    @JwtToken
    @GetMapping("/role/ids")
    @ApiOperation("角色权限id集合")
    public R<List<String>> getOauthIdsByRoleId(@RequestParam("id") Long id) {
        return R.ok().setResult(oauthService.getOauthIdsByRoleId(id));
    }

    @JwtToken
    @GetMapping("/admin}")
    @ApiOperation("管理员权限")
    public R<List<OauthVo>> getOauthByAdminId(@RequestParam("id") Long id) {
        return R.ok().setResult(oauthService.getOauthByAdminId(id));
    }

    @JwtToken
    @GetMapping("/tree")
    @ApiOperation("获取权限树")
    public R<List<TreeVo>> getOauthTree() {
        return R.ok().setResult(oauthService.getOauthTree());
    }
}
